package com.study.user;

import android.annotation.SuppressLint;
import android.os.Build;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import androidx.annotation.CallSuper;
import androidx.appcompat.widget.Toolbar;
import com.common.base.activity.BaseThemeActivity;
import com.common.bean.InfoResult;
import com.common.theme.ViewUtil;
import com.common.theme.views.SettingBasic;
import com.common.theme.views.SettingWithSwitchView;
import com.common.theme.views.themeable.ThemedSettingsCategory;
import com.common.ui.barlibrary.ImmersionBar;
import com.common.utils.AntiShake;
import com.mikepenz.google_material_typeface_library.GoogleMaterial;
import com.orhanobut.hawk.Hawk;
import com.study.R;
import com.study.user.settings.ColorsSetting;
import butterknife.BindView;
import butterknife.OnClick;

public class SetActivity extends BaseThemeActivity {

    @BindView(R.id.theme_setting_title)
    ThemedSettingsCategory themeSettingTitle;
    @BindView(R.id.ll_basic_theme)
    SettingBasic llBasicTheme;
    @BindView(R.id.ll_primaryColor)
    SettingBasic llPrimaryColor;
    @BindView(R.id.ll_accentColor)
    SettingBasic llAccentColor;
    @BindView(R.id.option_statusbar)
    SettingWithSwitchView optionStatusbar;
    @BindView(R.id.option_colored_navbar)
    SettingWithSwitchView optionColoredNavbar;
    @BindView(R.id.settingAct_scrollView)
    ScrollView settingActScrollView;
    @BindView(R.id.setting_background)
    LinearLayout settingBackground;
    private Toolbar toolbar;

    private TextView tv;

    @Override
    public boolean isImmersionBarEnabled() {
        return true;
    }

    @SuppressLint({"Range", "ResourceType"})
    @Override
    protected void initImmersionBar() {
        super.initImmersionBar();
        ImmersionBar.with(this)
                .statusBarDarkFont(false)   //状态栏字体是深色，不写默认为亮色
                .navigationBarDarkIcon(false) //导航栏图标是深色，不写默认为亮色
                .autoDarkModeEnable(true) //自动状态栏字体和导航栏图标变色，必须指定状态栏颜色和导航栏颜色才可以自动变色哦
                .autoNavigationBarDarkModeEnable(true) //自动导航栏图标变色，必须指定导航栏颜色才可以自动变色哦
                .autoStatusBarDarkModeEnable(true)//自动状态栏字体变色，必须指定状态栏颜色才可以自动变色哦
                //是否可以修改导航栏颜色，默认为true
                .navigationBarEnable(true)
                //导航栏颜色，不写默认黑色
                .navigationBarColor(R.color.barcolor)
                .statusBarColorForDecimal(getThemeHelper().getPrimaryColor())
                //自动状态栏字体和导航栏图标变色，必须指定状态栏颜色和导航栏颜色才可以自动变色哦
                .autoDarkModeEnable(true)
                //解决状态栏和布局重叠问题，任选其一，默认为false，当为true时一定要指定statusBarColor()，不然状态栏为透明色，还有一些重载方法
                .fitsSystemWindows(true)
                .init();
    }

    @Override
    public boolean isSupportSwipeBackEnabled() {
        return false;
    }

    @Override
    public View isSupportLoadSirEnabled() {
        return null;
    }

    @Override
    public int getLayoutResId() {
        return R.layout.activity_set;
    }

    @Override
    public void init() {
        tv = (TextView) findViewById(R.id.tv);
        initToolbar();
        //透明状态栏
        optionStatusbar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                updateTheme();
                setStatusBarNavigationBarColor();
            }
        });

        /**
         * 大于等于7.0
         */
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            if (ViewUtil.hasNavBar(this)) {
                optionColoredNavbar.setOnClickListener(new View.OnClickListener() {
                    @SuppressLint("NewApi")
                    @Override
                    public void onClick(View view) {
                        updateTheme();
                        setStatusBarNavigationBarColor();
                    }
                });
            } else {
                optionColoredNavbar.setVisibility(View.GONE);
            }
        }

        setScrollViewColor(settingActScrollView);
    }

    private void initToolbar(){
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        toolbar.setNavigationIcon(getToolbarIcon(GoogleMaterial.Icon.gmd_arrow_back));
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
        getSupportActionBar().setTitle(R.string.settings);
    }

    @Override
    public void loadData() {

    }

    @Override
    protected void onSuccess(int what, InfoResult t) {

    }

    /**
     * 基本主题
     *
     * @param view
     */
    @OnClick({R.id.ll_basic_theme})
    public void onChangeThemeClicked(View view) {
        //判断是否多次点击
        if (AntiShake.check(view.getId())) {
            return;
        }
        new ColorsSetting(SetActivity.this).chooseBaseTheme();
    }

    /**
     * 主色调
     *
     * @param view
     */
    @OnClick(R.id.ll_primaryColor)
    public void onChangePrimaryColorClicked(View view) {
        //判断是否多次点击
        if (AntiShake.check(view.getId())) {
            return;
        }
        final int originalColor = getPrimaryColor();
        new ColorsSetting(SetActivity.this).chooseColor(R.string.primary_color, new ColorsSetting.ColorChooser() {
            @Override
            public void onColorSelected(int color) {
                Hawk.put(getString(R.string.preference_primary_color), color);
                updateTheme();
                updateUiElements();
                tv.setText(""+ getThemeHelper().getPrimaryColor());
            }

            @Override
            public void onDialogDismiss() {
                Hawk.put(getString(R.string.preference_primary_color), originalColor);
                updateTheme();
                updateUiElements();
            }

            @Override
            public void onColorChanged(int color) {
                Hawk.put(getString(R.string.preference_primary_color), color);
                updateTheme();
                updateUiElements();
            }
        }, getPrimaryColor());
    }

    /**
     * 重点色调
     *
     * @param view
     */
    @OnClick(R.id.ll_accentColor)
    public void onChangeAccentColorClicked(View view) {
        final int originalColor = getAccentColor();
        new ColorsSetting(SetActivity.this).chooseColor(R.string.accent_color, new ColorsSetting.ColorChooser() {
            @Override
            public void onColorSelected(int color) {
                Hawk.put(getString(R.string.preference_accent_color), color);
                updateTheme();
                updateUiElements();
            }

            @Override
            public void onDialogDismiss() {
                Hawk.put(getString(R.string.preference_accent_color), originalColor);
                updateTheme();
                updateUiElements();
            }

            @Override
            public void onColorChanged(int color) {
                Hawk.put(getString(R.string.preference_accent_color), color);
                updateTheme();
                updateUiElements();
            }
        }, getAccentColor());
    }

    @Override
    protected void onFail(int what, InfoResult t) {

    }

    @CallSuper
    @Override
    public void updateUiElements() {
        super.updateUiElements();
        findViewById(R.id.setting_background).setBackgroundColor(getBackgroundColor());
        setStatusBarNavigationBarColor();
    }
}
